---
title: Turborepo 2.6
date: 2025/10/28
description: 'Microfrontends, Bun package manager to stable, task search in TUI'
tag: 'web development'
---

import { Authors } from '#components/authors';
import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
import { Date } from '#components/blog/date';
import { Accordion, Accordions } from '#components/accordion';
import { ThemeAwareImage } from '#components/theme-aware-image';

# Turborepo 2.6

<Date>Tuesday, October 28th, 2025</Date>

<Authors authors={['anthonyshew', 'tomknickman']} />

Turborepo 2.6 includes a number of improvements to developer experience for your repository:

- [**Microfrontends**](#microfrontends): Develop many applications on one `localhost` port
- [**Bun package manager to stable**](#bun-package-manager-to-stable): Granular lockfile analysis and pruning for `bun.lock`
- [**Task list search in terminal UI**](#task-list-search-in-terminal-ui): Use `/` to focus tasks faster

Upgrade today by running `npx @turbo/codemod migrate` or get started with `npx create-turbo@latest`.

<Tabs groupId="package-manager" items={['pnpm', 'yarn', 'npm', 'bun']} persist>

<Tab value="pnpm">

```bash title="Terminal"
# Use the automated upgrade CLI
pnpm dlx @turbo/codemod migrate

# Start a new repository
pnpm dlx create-turbo@latest
```

</Tab>

<Tab value="yarn">

```bash title="Terminal"
# Use the automated upgrade CLI
yarn dlx @turbo/codemod migrate

# Start a new repository
yarn dlx create-turbo@latest
```

</Tab>

<Tab value="npm">

```bash title="Terminal"
# Use the automated upgrade CLI
npx @turbo/codemod migrate

# Start a new repository
npx create-turbo@latest
```

</Tab>

<Tab value="bun">

```bash title="Terminal"
# Use the automated upgrade CLI
bunx @turbo/codemod migrate

# Start a new repository
bunx create-turbo@latest
```

</Tab>

</Tabs>

## Microfrontends

Vertical microfrontends are an architecture where multiple applications are served on one production domain, split into "zones". Each path for the domain is handled by one of the applications.

<ThemeAwareImage
  className="my-4 flex justify-center"
  light={{
    alt: '',
    src: '/images/blog/turbo-2-6/microfrontends-light.png',
    props: {
      width: 1600,
      height: 750,
      className: 'dark:hidden block rounded-xl',
    },
  }}
  dark={{
    alt: '',
    src: '/images/blog/turbo-2-6/microfrontends-dark.png',
    props: {
      width: 1600,
      height: 750,
      className: 'hidden dark:block rounded-xl',
    },
  }}
/>

This strategy gives teams at scale the ability to ship more independently. Release cycles become decoupled, build times can be brought down, and CI pipelines can get more focused, among other benefits.

While this does help production deployments, it can create difficulty for local development since you’ll have to run many applications instead of just one. Each application ends up needing its own development command and port to use.

Today, we’re releasing a microfrontend proxy for local development, so that all of your applications can run on one port, with one command. Add a `microfrontends.json` file to your parent application and Turborepo will automatically proxy `localhost:3024` to the ports for your other applications.

```json title="./apps/web/microfrontends.json"
{
  "$schema": "https://turborepo.com/microfrontends/schema.json"
  "applications": {
    "web": {
      "development": {
        "local": 3000
      }
    },
    "docs": {
      "development": {
        "local": 3001
      },
      "routing": [
        {
          "paths": ["/docs", "/docs/:path*"]
        }
      ]
    }
  }
}
```

Just run `turbo dev`. In this configuration, your `docs` app runs its development server on `localhost:3001` and will handle requests for `/docs` and all nested paths in `/docs`. The `web` app runs on `localhost:3000` and handles all other requests.

[Visit the documentation](/docs/guides/microfrontends) to learn more.

### Integrating with production infrastructure

While Turborepo’s native microfrontend proxy is meant for working locally, we’re deeply integrating with infrastructure providers to help you bring your microfrontends architecture to production.

For example, we’ve designed the Turborepo-native microfrontends proxy to work with [Vercel’s microfrontends product](http://vercel.com/microfrontends), which is also releasing to GA today. In fact, Vercel’s microfrontends feature provided the research for Turborepo-native microfrontends. We explored how to build microfrontends, locally and in production, with some of the largest customers at Vercel, and are now extracting those learnings from closed-source to open-source.

When you install [`@vercel/microfrontends`](https://www.npmjs.com/package/@vercel/microfrontends?activeTab=readme) into your repository, Turborepo will dynamically adjust your local environment to use the proxy provided by the package, deeply integrating with your production infrastructure. [Visit the Vercel microfrontends documentation](https://vercel.com/docs/microfrontends) to learn more.

We look forward to working with more providers to integrate seamless microfrontends across your stack. If you are an infrastructure provider looking to integrate, please reach out.

## Bun package manager to stable

Bun is a fast, incrementally adoptable all-in-one JavaScript, TypeScript & JSX toolkit. Today, Bun as a package manager is now stable in Turborepo.

This means that, when you use Bun as your package manager, Turborepo will only miss cache for packages that have changes in their dependencies. If you update a dependency for your `web` application, your `docs` application’s tasks will still hit cache.

Since September 2023, Turborepo has had Beta support for Bun’s package manager capabilities. Our first iteration worked with the original `bun.lockb` lockfile, though it didn’t have granular change detection, so any change to your dependencies would result in cache misses for your whole repository. Since then, Bun’s lockfiles have undergone several changes:

- In December 2024, Bun introduced the text-based `bun.lock`, with a `v0` version. Because this file is text-based, Turborepo could parse it to intelligently cache tasks for your packages based on dependency changes.
- In January 2025, `bun.lock`'s format changed from a `v0` to `v1`, breaking the parser we created for `v0`. A package manager’s lockfile isn’t part of its public API, and Bun got much faster because of this change, so we were excited to see the improvement. But we didn't know if we were going to need to rewrite a new parser every month...

After a few months of stability and [an inspiring blog post about the new lockfile format by the Bun team](https://bun.com/blog/behind-the-scenes-of-bun-install), Turborepo now handles the latest `v1` lockfile format for Bun.

We’ve updated [our Support Policy](/docs/support-policy#package-managers) and the rest of our documentation to reflect this update. We also want to thank the Bun team for [sending `robobun` to help us with the first draft of the PR](https://github.com/vercel/turborepo/pull/10729).

## Task list search in terminal UI

The terminal UI in Turborepo was early to today’s trend of TUI-based experiences that we’re seeing in many AI-based workflows. Turborepo’s terminal UI brings many benefits compared to streamed logs, including improved readability for task logs, easy copy-paste for a specific task, interactive tasks, and more.

But in large repositories, it can be slow to scroll through a large list of tens or hundreds of tasks, one-by-one.

Today, we’re improving on our task search to make it one of the fundamental ways that you interact with a large Turborepo. When using the terminal UI, press `/` to filter to only the tasks that you’re interested in.

<ThemeAwareImage
  className="my-4 flex justify-center"
  light={{
    alt: 'A terminal window showing Turborepo\'s terminal UI. The top bar shows a search query for "docs" and the task list has dimmed every task except the tasks containing the name "docs".',
    src: '/images/blog/turbo-2-6/task-search-light.png',
    props: {
      width: 682,
      height: 746.5,
      className: 'dark:hidden block rounded-xl',
    },
  }}
  dark={{
    alt: 'A terminal window showing Turborepo\'s terminal UI. The top bar shows a search query for "docs" and the task list has dimmed every task except the tasks containing the name "docs".',
    src: '/images/blog/turbo-2-6/task-search-dark.png',
    props: {
      width: 682,
      height: 746.5,
      className: 'hidden dark:block rounded-xl',
    },
  }}
/>

Only the tasks that match your search query will be selected. [Visit the terminal UI documentation](/docs/crafting-your-repository/developing-applications#using-the-terminal-ui) to learn more.

## Other changes

<Accordions>

  <Accordion title="Features (17)">

    - feat(tui): more keybinds for scrolling ([#10248](https://github.com/vercel/turborepo/pull/10248))
    - feat(tui): configurable scrollback length ([#10247](https://github.com/vercel/turborepo/pull/10247))
    - feat(codemod): update `$schema` when versioned ([#10319](https://github.com/vercel/turborepo/pull/10319))
    - feat(sidebar): improve folder link accessibility and UX ([#10349](https://github.com/vercel/turborepo/pull/10349))
    - feat(ls): add dependents to json output ([#10367](https://github.com/vercel/turborepo/pull/10367))
    - feat(dry): include `with` in dry run/summary output ([#10373](https://github.com/vercel/turborepo/pull/10373))
    - feat(ui): remove gutter from persisted task output ([#10406](https://github.com/vercel/turborepo/pull/10406))
    - feat(tui): momentum-based scrolling ([#10420](https://github.com/vercel/turborepo/pull/10420))
    - feat(turbo.json): allow for trailing commas ([#10537](https://github.com/vercel/turborepo/pull/10537))
    - feat(env): add Windows user profile variables to pass-through ([#10588](https://github.com/vercel/turborepo/pull/10588))
    - feat(auth): optional callback port ([#10666](https://github.com/vercel/turborepo/pull/10666))
    - feat(create-turbo): `--no-git` flag ([#10720](https://github.com/vercel/turborepo/pull/10720))
    - feat(tui): add shortcut for clearing task logs ([#10828](https://github.com/vercel/turborepo/pull/10828))
    - feat: new OAuth flow for Turborepo CLI with Vercel ([#10911](https://github.com/vercel/turborepo/pull/10911))
    - feat: update `create-turbo` Bun prompt text ([#10918](https://github.com/vercel/turborepo/pull/10918))
    - feat(microfrontends): schema.json for microfrontends.json ([#11008](https://github.com/vercel/turborepo/pull/11008))
    - feat: Add support for custom microfrontends.json naming ([#11022](https://github.com/vercel/turborepo/pull/11022))

  </Accordion>

  <Accordion title="Fixes (30)">

    - fix(microfrontends): ensure that local proxy is loose ([#10289](https://github.com/vercel/turborepo/pull/10289))
    - fix(codemod): check for pipeline key before using it ([#10295](https://github.com/vercel/turborepo/pull/10295))
    - fix(@turbo/repository): no longer require packageManager to detect npm ([#10314](https://github.com/vercel/turborepo/pull/10314))
    - fix(watch): allow usage of turbo.jsonc ([#10340](https://github.com/vercel/turborepo/pull/10340))
    - fix(dry): do not perform runtime validations on dry runs ([#10375](https://github.com/vercel/turborepo/pull/10375))
    - fix(microfrontends): respect packageName field ([#10383](https://github.com/vercel/turborepo/pull/10383))
    - fix(pnpm): read linkWorkspacePackages from pnpm-workspace.yaml ([#10391](https://github.com/vercel/turborepo/pull/10391))
    - fix(query): use patched version of async-graphql ([#10448](https://github.com/vercel/turborepo/pull/10448))
    - fix(turbo-ignore): no longer attempt to use catalog protocol ([#10458](https://github.com/vercel/turborepo/pull/10458))
    - fix(@turbo/repository): correct exports from native lib ([#10475](https://github.com/vercel/turborepo/pull/10475))
    - fix(turbo): pass through pnpm store env vars by default ([#10520](https://github.com/vercel/turborepo/pull/10520))
    - fix(pnpm): respect deep for linkWorkspacePackages ([#10558](https://github.com/vercel/turborepo/pull/10558))
    - fix(query): pin to last graphiql version with artifacts ([#10685](https://github.com/vercel/turborepo/pull/10685))
    - fix(logs): no longer output group prefixes if no logs present ([#10760](https://github.com/vercel/turborepo/pull/10760))
    - fix(turbo): graceful shutdown on sighup ([#10764](https://github.com/vercel/turborepo/pull/10764))
    - fix(logs): create log files for non-cached tasks ([#10806](https://github.com/vercel/turborepo/pull/10806))
    - fix(security): update dependencies to resolve warning for `node-plop` ([#10847](https://github.com/vercel/turborepo/pull/10847))
    - fix: revert #10847 ([#10882](https://github.com/vercel/turborepo/pull/10882))
    - fix: update `ui` suggested value in error message for turbo.json ([#10896](https://github.com/vercel/turborepo/pull/10896))
    - fix(eslint-config-turbo): use module.exports for ESLint v8 compatibility ([#10902](https://github.com/vercel/turborepo/pull/10902))
    - fix(turborepo-lockfiles): handle missing optional dependencies in Bun lockfiles ([#10909](https://github.com/vercel/turborepo/pull/10909))
    - fix(lockfiles): include bundled dependencies in Bun lockfile subgraphs ([#10915](https://github.com/vercel/turborepo/pull/10915))
    - fix: update remote cache OAuth refresh flow ([#10916](https://github.com/vercel/turborepo/pull/10916))
    - fix: --graph=foo.dot should not require graphviz installed ([#10942](https://github.com/vercel/turborepo/pull/10942))
    - fix: `injectWorkspacePackages` for `turbo prune` with pnpm ([#10945](https://github.com/vercel/turborepo/pull/10945))
    - fix: adjust binary call for microfrontends proxy on Windows ([#10962](https://github.com/vercel/turborepo/pull/10962))
    - fix: added Linux env vars to global passthroughs ([#10984](https://github.com/vercel/turborepo/pull/10984))
    - fix: windows symlinking bug ([#10992](https://github.com/vercel/turborepo/pull/10992))
    - fix: path validation in `microfrontends.json` ([#11006](https://github.com/vercel/turborepo/pull/11006))

  </Accordion>

  <Accordion title="Documentation (37)">

    - docs: clarification on Transit Nodes docs ([#9181](https://github.com/vercel/turborepo/pull/9181))
    - fix(docs): fix SVG attribute casing to remove React warnings ([#10297](https://github.com/vercel/turborepo/pull/10297))
    - fix(docs): update redirects rule to resolve access issue on `getting-started` index page ([#10296](https://github.com/vercel/turborepo/pull/10296))
    - docs(fix): persist tabs state ([#10313](https://github.com/vercel/turborepo/pull/10313))
    - docs(chore): remove classnames dependency ([#10339](https://github.com/vercel/turborepo/pull/10339))
    - docs(chore): remove `/repo` references from a few places ([#10370](https://github.com/vercel/turborepo/pull/10370))
    - docs(chore): add robots.txt ([#10371](https://github.com/vercel/turborepo/pull/10371))
    - docs(fix): better usability on feedback form ([#10382](https://github.com/vercel/turborepo/pull/10382))
    - docs(fix): logos when using system theme ([#10388](https://github.com/vercel/turborepo/pull/10388))
    - docs(chore): switch to ESM ([#10405](https://github.com/vercel/turborepo/pull/10405))
    - docs(fix): date of 2.5 release post ([#10419](https://github.com/vercel/turborepo/pull/10419))
    - docs(chore): temporarily revert to webpack ([#10421](https://github.com/vercel/turborepo/pull/10421))
    - docs(fix): layout shift on home page ([#10424](https://github.com/vercel/turborepo/pull/10424))
    - docs(chore): cleaning up a few todos ([#10426](https://github.com/vercel/turborepo/pull/10426))
    - docs(chore): reenable Turbopack ([#10428](https://github.com/vercel/turborepo/pull/10428))
    - docs(examples): drop JS config from Tailwind example ([#10445](https://github.com/vercel/turborepo/pull/10445))
    - docs(fix): correct `globalDependencies` defaults ([#10484](https://github.com/vercel/turborepo/pull/10484))
    - docs(example): use npx turbo and show filtering ([#10500](https://github.com/vercel/turborepo/pull/10500))
    - docs(fix): use `pnpm add <pkg>` instead of `pnpm install <pkg>` ([#10529](https://github.com/vercel/turborepo/pull/10529))
    - docs(fix): missing commas in package.json files of jest docs ([#10560](https://github.com/vercel/turborepo/pull/10560))
    - docs(fix): css import order bug in tailwindcss docs and example ([#10561](https://github.com/vercel/turborepo/pull/10561))
    - docs(fix): incorrect CSS filename in Tailwind CSS setup example ([#10573](https://github.com/vercel/turborepo/pull/10573))
    - docs(fix): inconsistent command with the illustration ([#10596](https://github.com/vercel/turborepo/pull/10596))
    - docs(fix): inconsistent turbo command with the illustration ([#10602](https://github.com/vercel/turborepo/pull/10602))
    - docs: fix JSDoc type for ESLint config in basic example ([#10727](https://github.com/vercel/turborepo/pull/10727))
    - docs(run): correct --graph formats; remove incorrect default mention ([#10744](https://github.com/vercel/turborepo/pull/10744))
    - docs(run): fix --log-prefix options to match CLI (task, not prefix) ([#10743](https://github.com/vercel/turborepo/pull/10743))
    - fix(docs): fix broken anchor links to --graph option ([#10773](https://github.com/vercel/turborepo/pull/10773))
    - docs: add GitHub Actions reusable workflow documentation for remote caching ([#10923](https://github.com/vercel/turborepo/pull/10923))
    - docs: generate blog release OG images ([#10936](https://github.com/vercel/turborepo/pull/10936))
    - docs: fix correct package name from eslint-config-turbo to eslint-plugin-turbo ([#10954](https://github.com/vercel/turborepo/pull/10954))
    - docs: adjust compute hours saved component initial value ([#10958](https://github.com/vercel/turborepo/pull/10958))
    - docs: align tailwindcss 4 guide to the with-tailwind example  ([#10963](https://github.com/vercel/turborepo/pull/10963))
    - docs: fix typos and formatting issues in Playwright guide ([#10980](https://github.com/vercel/turborepo/pull/10980))
    - docs: clarify passthrough args comparison ([#10990](https://github.com/vercel/turborepo/pull/10990))
    - docs: fix profile images on home page ([#10993](https://github.com/vercel/turborepo/pull/10993))
    - docs: Clarify passthrough args cache miss ([#11026](https://github.com/vercel/turborepo/pull/11026))

  </Accordion>

  <Accordion title="Examples (17)">

    - refactor(examples): enhance `with-nestjs` (#8131) ([#10964](https://github.com/vercel/turborepo/pull/10964))
    - fix(examples): fix build in fresh vue example project ([#10277](https://github.com/vercel/turborepo/pull/10277))
    - fix(non-monorepo): correct devDependency from 'turb' to 'turbo' ([#10526](https://github.com/vercel/turborepo/pull/10526))
    - fix(examples): change docker command ([#10362](https://github.com/vercel/turborepo/pull/10362))
    - fix(examples): `with-svelte` classes ([#10363](https://github.com/vercel/turborepo/pull/10363))
    - feat(examples): upgrade with-tailwind to TailwindCSS v4 ([#10432](https://github.com/vercel/turborepo/pull/10432))
    - fix(examples): TypeScript in with-svelte example ([#10450](https://github.com/vercel/turborepo/pull/10450))
    - feat(example): update with-react-native-web, Expo SDK 52 ([#10466](https://github.com/vercel/turborepo/pull/10466))
    - fix(examples): use entry instead of entryPoints ([#10503](https://github.com/vercel/turborepo/pull/10503))
    - fix(example/with-docker): jest can't resolve @repo/jest-presets/node ([#10551](https://github.com/vercel/turborepo/pull/10551))
    - fix(example): add missing Tailwind import to shared ui styles ([#10579](https://github.com/vercel/turborepo/pull/10579))
    - refactor(examples): remove duplicate Next.js plugin from app tsconfig files ([#10612](https://github.com/vercel/turborepo/pull/10612))
    - fix(examples): css specificity in Tailwind example ([#10657](https://github.com/vercel/turborepo/pull/10657))
    - refactor(examples): update CSS variable names to use consistent --color- prefix in tailwind examples ([#10662](https://github.com/vercel/turborepo/pull/10662))
    - fix(examples): vitest version upgrade ([#10667](https://github.com/vercel/turborepo/pull/10667))
    - fix(examples): update vitest config paths for packages and apps in `with-vitest` ([#10675](https://github.com/vercel/turborepo/pull/10675))
    - fix(examples): correct 'test:projects' script to use vitest directly ([#10683](https://github.com/vercel/turborepo/pull/10683))
    - fix(examples): add missing extension to with-react-native-web ui tsconfig ([#10694](https://github.com/vercel/turborepo/pull/10694))
    - examples: Upgrade core-team-maintained examples to Next.js 16 ([#11014](https://github.com/vercel/turborepo/pull/11014))

  </Accordion>

</Accordions>

## Acknowledgments and community

Turborepo is the result of the combined work of all of its contributors, including our core team: [Anthony](https://github.com/anthonyshew) and [Tom](https://github.com/tknickman).

Thank you for your continued support, feedback, and collaboration to make Turborepo your build tool of choice. To learn how to get involved, [visit the Community page](/docs/community).

We also thank everyone who contributed to this release of Turborepo: @0ri0nexe, @0xmuon, @ahlimanhuseynov, @Alvi24, @andrewjdimola, @ashishkumar901336, @aviramha, @brunoapaulino, @chris-olszewski, @d0lwl0b, @DiegoDev2, @dstewart1911, @emilbjorklund, @eric-hjh, @esauri, @eug-vs, @evsasse, @felipetau, @Franck-Fernandez-pro, @grgsh, @haklee, @hijuliancode, @hugomassing, @JacksonSL, @JamesHenry, @jeonghwan-park, @jferrettiboke, @jihwan1211, @JoeyKamsteeg, @kade-robertson, @kenfdev, @kitfoster, @leopardracer, @mamuso, @mcky, @melroy, @MendyLanda, @mischnic, @mknichel, @mrr11k, @namidapoo, @NathanM2000, @neonerdy, @nivekithan, @ognevny, @oliveirabalsa, @pawbor, @pzion, @Redddy, @richardhuf84, @robbym, @robobun, @safaiyeh, @sahyl, @Satheeshsk369, @schwenkm, @sdavids, @shinjith-dev, @sitek94, @tedw, @tetzng, @vikhyathdevadiga, @xcfio, @yam-codes, and @yamadayutaka
